#pragma once

#include "../../EngineDef.h"

class ICamera
{
	
protected:
	Vector3<float> mPosition; 
	Vector3<float> mRotation;
	Vector3<float> mForward;
	Vector3<float> mLeft;
	Vector3<float> mUp;

	bool mViewChanged;
	
public:
	ICamera(void);
	virtual ~ICamera(void);

	virtual void Init();

	virtual Vector3<float> GetPosition();
	virtual void SetPosition(Vector3<float> position);
	virtual void SetPosition(float x, float y, float z = 0.0f);
	
	virtual Vector3<float> GetRotation();
	virtual void SetRotation(Vector3<float> rotation);
	virtual void SetRotation(float x, float y, float z = 0.0f);

	virtual Vector3<float> GetForward();

	virtual Vector3<float> GetLeft();

	virtual Vector3<float> GetUp();
	
	virtual void Update(void);
	virtual void CheckViewChangedAndUpdate(); // need to update (revisit again)
 
	virtual void MoveForward(float distance);
	virtual void StrafeLeft(float distance);

	virtual void RotateX(float angle);
	virtual void RotateY(float angle);
	//virtual void RotateZ(float angle);

};

